//
//  HJHomeController.swift
//  zhangmiSinweibo
//
//  Created by zhangmi on 16/5/19.
//  Copyright © 2016年 Paramount Pictures. All rights reserved.
//

import UIKit
import SVProgressHUD

private let HomeCellId = "HomeCellId"
class HJHomeController: HJBaseTableViewController {
    
    //自定义下拉刷新控件
    let refreshView = HJRefreshControl()
    //定义模型数组
    //lazy var statuses: [HMStatus] = [HMStatus]()
    //添加视图模型属性
    lazy var statusListViewModel: HJStatusListViewModel = HJStatusListViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin {
            //用户未登录,, 设置访客视图的界面
            visitorLoginView.updateUI("关注一些人,回到这里看看有什么惊喜", imageName: "visitordiscover_feed_image_smallicon", isHome: true)
            return
        }
        
        setNavBar()
        //设置tableView
        prepareForTableView()
        loadData()
        
//        return
    }
    
    private func prepareForTableView() {
        //准备tableView
        //注册cell  [UITableViewCell class]
        //在未登录状态下 tableView 为nil
        tableView.registerClass(HJStatusCell.self, forCellReuseIdentifier: HomeCellId)
//        设置cell的高度
//        tableView.rowHeight = 300
        tableView.rowHeight = UITableViewAutomaticDimension
        //设置预估行高.行高的自动计算
        //提高tableView加载效率 预估行高 * 数据源的数量 = contentSize  -> tableView才可以滚动
        tableView.estimatedRowHeight = 300
        //设置分割线
        tableView.separatorStyle = .None
        
        //添加初始响应的事件
        refreshView.addTarget(self, action: #selector(HJHomeController.loadData), forControlEvents: .ValueChanged)
        
        //添加到tableView上
        self.tableView.addSubview(refreshView)

        //设置小菊花, tableView的tableViewFooterView
        tableView.tableFooterView = pullupView
    }
    //设置导航条
    private func setNavBar() {
         let popItem = UIBarButtonItem(imageName: "navigationbar_pop", target: self, action: #selector(HJHomeController.push))
        //设置导航条的右边的barbuttonItem
        navigationItem.rightBarButtonItem = popItem
    }
    
    @objc private func push() {
        let detail = HJDetailController()
        detail.hidesBottomBarWhenPushed = true
        
        navigationController?.pushViewController(detail, animated: true)
    }
    
    //小菊花控件
    private lazy var pullupView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
        //初始的时候做动画
        
        return indicatorView
    }()

}

extension HJHomeController {
    //加载数据
        @objc private func loadData() {
            statusListViewModel.loadData(pullupView.isAnimating()) { (isSuccess) in

            //停止小菊花的转动
            self.pullupView.stopAnimating()

            //self.refreshControl?.endRefreshing()
            self.refreshView.endRefreshing()
            
            if !isSuccess {
                //提示用户请求失败
                SVProgressHUD.showErrorWithStatus(AppErrorTip)
                return
            }
            //请求成功
            //刷新数据
            self.tableView.reloadData()
        }
    }
}

///实现数据源方法
extension HJHomeController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusViewModelArray.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //以后获取缓存cell都是使用这种方式
        //需要注册cell的类型 和 可重用标识
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! HJStatusCell

        // //如果正在加载最后一行cell的时候 && 没有转动的时候 开始加载老数据
        if indexPath.row == statusListViewModel.statusViewModelArray.count - 1 && !pullupView.isAnimating() {
            print("开始执行静默加载")
            pullupView.startAnimating()
            
            //加载数据
            loadData()
        }
        
        cell.statusViewModel = statusListViewModel.statusViewModelArray[indexPath.row]

        return cell
    }
}





